/**
 * 接口：interface 规范类或者对象的格式的一种工具
 *  接口用来规范类的时候 其效果和 抽象类也非常的像
 */

/**
 * 总结 接口与抽象类的区别
 *  - 接口可以规范对象 抽象类只能规范类
 *  - 接口只能定义类型，不能有具体的实现，抽象类除了抽象方法 还能有自己的方法
 *  - 类继承接口规范使用的是 implements 关键字，类继承抽象类，使用的是 extends 关键字
 */
{
  interface animal{
    weight:number;
    eat():void
    /**
     * 接口只能定义类型 不能有具体的实现（不能像抽象类一样有实例方法）
     */
  }
  /**
   * 类继承接口规范 使用的是 implements 关键字
   */

  class Dog implements animal{
    weight:number
    eat(){
      console.log('dog eat food')
    }
  }
  let dog = new Dog()
  dog.eat()

  abstract class animal2 {
    abstract weight:number;
    abstract eat():void;
    /**
     * 抽象类 出了抽象方法 还能有自己的方法
     */
    show(){
      console.log('hello world')
    }
  }

  /**
   * 类继承抽象类 使用的是 extends 关键字
   */
  class Cat extends animal2{
    weight:number
    eat(){
      console.log('cat eat food')
    }
  }
  let cat = new Cat()
  cat.eat()
}